<!DOCTYPE html>
<html lang='en'>

<head>
    <meta charset='UTF-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <meta name='viewport' content='width=device-width, initial-scale=1.0'>
    <title>Document</title>
    <script src='../vue.global.js'></script>
</head>

<body>
    <div id="event-with-method">
        <!-- `greet` 是在下面定义的方法名 -->
        <!-- 没有定义参数时 系统会默认【隐式】传递事件对象 -->
        <button @click="greet">Greet</button>
        <hr>

        <div id="inline-handler">
            <button @click="say('hi')">Say hi</button>
            <button @click="say('what')">Say what</button>
        </div>
        <hr>

        <!-- 既要传递自定义参数 又要传递事件对象 -->
        <!-- 需要给事件处理函数传递参数时 则事件对象必须【显式】传递 -->
        <button @click="warn('Form cannot be submitted yet.',$event)">
            Submit
        </button>
        <hr>

        <!-- 这两个 one() 和 two() 将执行按钮点击事件 -->
        <button @click="one($event), two($event)">
            Submit
        </button>
    </div>

    <script>
        Vue.createApp({
            data() {
                return {
                    name: 'Vue.js'
                }
            },
            methods: {
                greet(event) {
                    // `methods` 内部的 `this` 指向当前活动实例
                    alert('Hello ' + this.name + '!')
                    // `event` 是原生 DOM event
                    if (event) {
                        alert(event.target.tagName)
                    }
                },
                say(message) {
                    alert(message)
                },
                warn(message,event) {
                    // 现在可以访问到原生事件
                    if (event) {
                        console.log("event", event);
                        // event.preventDefault()
                    }
                    alert(message)
                },
                one(event) {
                    // 第一个事件处理器逻辑...
                    console.log("one", event);
                },
                two(event) {
                    // 第二个事件处理器逻辑...
                    console.log("two", event);
                }
            }
        }).mount('#event-with-method')
    </script>
</body>

</html>